﻿#ifndef STRUCTEDIT_H
#define STRUCTEDIT_H

#include "ICDConfig/FileOperation.h"
#include <QWidget>
#include <QStandardItemModel>
#include <QMessageBox>
#include <QMap>

namespace Ui {
class StructEdit;
}

class StructEdit : public QDialog
{
    Q_OBJECT

public:
    explicit StructEdit(QWidget *parent = nullptr);
    ~StructEdit();

signals:
    /**
     * @brief signal_ShowStructDisplay 显示结构体界面
     * @param index 界面索引
     */
    void sgl_ShowStructDisplay(const int &index);
    /**
     * @brief sgl_GetSelectedTopicId 获取当前选中项的主题Id
     * @return 主题Id
     */
    int sgl_GetSelectedSignalId();
    /**
     * @brief signal_AddStruct 添加结构体
     * @param structId 结构体Id
     * @param structName 结构体名称
     */
    void sgl_AddStruct(int &structId, QString &structName);
    /**
     * @brief signal_DeleteStruct 删除主题
     * @param structId 结构体Id
     */
    void sgl_DeleteStruct(const QVariant &structId);
    /**
     * @brief sgl_LoadSignalInfo 加载该结构体Id的信号信息
     * @param type 信号所属父级的类型
     * @param selectedStructId 选择的结构体Id
     */
    void sgl_LoadSignalInfo(ParentType type,const QVariant &selectedStructId);

public slots:
    /**
     * @brief slot_ShowStructDisplay 显示结构体界面
     * @param index 界面索引
     */
    void slt_ShowStructDisplay(const int &index);

private slots:
    /**
     * @brief on_lineEdit_search_textChanged 搜索文本改变
     * @param arg1 搜索文本
     */
    void on_lineEdit_search_textChanged(const QString &arg1);
    /**
     * @brief on_pushButton_addStruct_clicked 添加结构体
     */
    void on_pushButton_addStruct_clicked();
    /**
     * @brief on_pushButton_deleteStruct_clicked 删除结构体
     */
    void on_pushButton_deleteStruct_clicked();
    /**
     * @brief on_pushButton_select_clicked 选择结构体
     */
    void on_pushButton_select_clicked();

private:
    Ui::StructEdit *ui;
    //! 选择的信号Id
    QVariant m_SelectedSignalId;

private:
    /**
     * @brief init 初始化
     */
    void init();
};

#endif // STRUCTEDIT_H
